﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace DatabaseManager.Core.Models
{
    /// <summary>
    /// 封装完整的数据库元数据，包括数据库、表、字段、索引、约束等信息。
    /// </summary>
    public class DatabaseMetadata
    {
        /// <summary>
        /// 数据库基本信息。
        /// </summary>
        public DatabaseInfo Database { get; set; }

        /// <summary>
        /// 所有表的信息。
        /// </summary>
        public List<TableInfo> Tables { get; set; } = new List<TableInfo>();

        /// <summary>
        /// 所有索引信息。
        /// </summary>
        public List<IndexInfo> Indexes { get; set; } = new List<IndexInfo>();

        /// <summary>
        /// 所有约束信息。
        /// </summary>
        public List<ConstraintInfo> Constraints { get; set; } = new List<ConstraintInfo>();

        /// <summary>
        /// 获取当前数据库下所有的字段信息（通过遍历 Tables.Columns）。
        /// </summary>
        public IEnumerable<ColumnInfo> GetAllColumns()
        {
            return Tables.SelectMany(t => t.Columns);
        }

        /// <summary>
        /// 按字段名称筛选字段（可扩展为按类型、注释等筛选）
        /// </summary>
        public IEnumerable<ColumnInfo> FindColumns(string columnName)
        {
            return GetAllColumns().Where(c => c.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase));
        }
    }
}